else
{
luminance = luminance / alpha;
- if (alpha == BABL_ALPHA_FLOOR)
+ if (alpha == BABL_ALPHA_FLOOR || alpha == -BABL_ALPHA_FLOOR)
alpha = 0.0;
}
double green = *(double *) src[1];
double blue = *(double *) src[2];
double luminance;
- double alpha, alpha_used;
- alpha_used = alpha = *(double *) src[3];
- if (alpha < BABL_ALPHA_FLOOR)
- alpha_used = BABL_ALPHA_FLOOR;
+ double alpha = *(double *) src[3];
+ if (alpha <= BABL_ALPHA_FLOOR)
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
luminance = red * RGB_LUMINANCE_RED +
green * RGB_LUMINANCE_GREEN +
blue * RGB_LUMINANCE_BLUE;
- luminance *= alpha_used;
+ luminance *= alpha;
*(double *) dst[0] = luminance;
- *(double *) dst[1] = alpha_used;
+ *(double *) dst[1] = alpha;
BABL_PLANAR_STEP
}
}
while (n--)
{
int band;
- double alpha, alpha_used;
-
- alpha_used = alpha = *(double *) src[src_bands-1];
+ double alpha = *(double *) src[src_bands-1];
if (alpha < BABL_ALPHA_FLOOR)
- alpha_used = BABL_ALPHA_FLOOR;
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
for (band = 0; band < src_bands - 1; band++)
{
- *(double *) dst[band] = *(double *) src[band] * alpha_used;
+ *(double *) dst[band] = *(double *) src[band] * alpha;
}
- *(double *) dst[dst_bands - 1] = alpha_used;
+ *(double *) dst[dst_bands - 1] = alpha;
BABL_PLANAR_STEP
}
else
*(double *) dst[band] = *(double *) src[band] / alpha;
}
- if (alpha == BABL_ALPHA_FLOOR)
+ if (alpha == BABL_ALPHA_FLOOR || alpha == -BABL_ALPHA_FLOOR)
alpha = 0.0;
*(double *) dst[dst_bands - 1] = alpha;
double blue = ((double *) src)[2];
double luminance;
double luma;
- double alpha, alpha_used;
- alpha_used = alpha = ((double *) src)[3];
+ double alpha = ((double *) src)[3];
if (alpha < BABL_ALPHA_FLOOR)
- alpha_used = BABL_ALPHA_FLOOR;
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
luminance = red * RGB_LUMINANCE_RED +
green * RGB_LUMINANCE_GREEN +
blue * RGB_LUMINANCE_BLUE;
luma = babl_trc_from_linear (trc, luminance);
- ((double *) dst)[0] = luma * alpha_used;
- ((double *) dst)[1] = alpha_used;
+ ((double *) dst)[0] = luma * alpha;
+ ((double *) dst)[1] = alpha;
src += 4 * sizeof (double);
dst += 2 * sizeof (double);
luminance = babl_trc_to_linear (trc, luma);
- if (alpha == BABL_ALPHA_FLOOR)
+ if (alpha == BABL_ALPHA_FLOOR || alpha == -BABL_ALPHA_FLOOR)
alpha = 0.0;
((double *) dst)[0] = luminance;